package com.qingshu.controller;

import com.qingshu.common.annotation.Log;
import com.qingshu.common.entity.sys.model.LoginBody;
import com.qingshu.common.entity.sys.model.RegisterBody;
import com.qingshu.common.enums.BusinessType;
import com.qingshu.common.util.body.CommonModel;
import com.qingshu.common.util.body.JsonResult;
import com.qingshu.common.util.body.ModelTool;
import com.qingshu.common.util.body.ResultTool;
import com.qingshu.common.util.constant.Constants;
import com.qingshu.common.util.string.StringUtils;
import com.qingshu.service.LoginService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Huzz
 * @created 2021-12-01 19:14
 */
@Api(tags = "用户登录")
@RestController
public class LoginController {

    @Autowired
    private LoginService loginService;

    /**
     * 登录操作不能将请求参数保存到操作日志中, 避免用户名密码被导出.
     * 也不建议将返回参数保存, 返回的token应避免被恶意使用
     * @param user
     * @return
     */
    @Log(title = "登录操作", businessType = BusinessType.LOGIN)
    @ApiOperation("用户登录")
    @PostMapping("/login")
    public JsonResult register(@RequestBody LoginBody user) {

        // 登录成功, 生成token
        CommonModel token = ModelTool.createModel().put(Constants.TOKEN, loginService.login(user));

        return StringUtils.isNotEmpty(token)? ResultTool.success(token) : ResultTool.fail();
    }

}
